package moduleFrame
{
	import flash.display.DisplayObject;
	import flash.events.Event;

	/**
	 * 外观模块，即根级的context，每个项目一个Facade
	 * @author Pelephone
	 */
	public class Facade extends Context
	{
		private static const NAME:String = "FACADE";
		
		public function Facade(aContextView:DisplayObject=null)
		{
			super(NAME,aContextView);
			
			_parent = this;
			_root = this;
			instance = this;
			
			if(!contextView) return;
			
			//拿到了 stage 对象的时候才实例化对象
			if (contextView.stage)
				onSkinToStage();
			else
				contextView.addEventListener(Event.ADDED_TO_STAGE, onSkinToStage);
		}
		
		// 皮肤第一次放到舞台时调用
		private function onSkinToStage(e:Event=null):void
		{
			contextView.removeEventListener(Event.ADDED_TO_STAGE,onSkinToStage);
			onSkinInit();
		}
		
		/**
		 * 关联UI初始化，即第一次加到舞台的时候调此方法
		 */
		protected function onSkinInit():void
		{
			// 复盖此方法
		}
		
		/**
		 * 单例
		 */
		protected static var instance:Facade;
		/**
		 * 获取单例
		 */
		public static function getInstance():Facade
		{
			if(!instance)
				instance = new Facade();
			
			return instance;
		}
		
		/**
		 * 是否已经初始
		 * @return 
		 */
		public static function get hasInstance():Boolean
		{
			return instance!=null;
		}
	}
}